home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
130 MIDI Tool Box
/
130 MIDI Tool Box.iso
/
driver
/
midio.asm
< prev
next >
Wrap
Assembly Source File
|
1987-05-07
|
3KB
|
150 lines
PAGE 56,132
TITLE MIDIO PERFORM DIRECT DOS CALLS FOR C86 C MAIN PROGRAMS
; (c) Copyright 1984 by The Computer Entomologist
;
; Permission is hearby granted to use or distribute this software
;without any restrictions. You may make copies for yourself or your
;friends. You may include it in any hardware or software product that you
;sell for profit.
;
; This software is distributed as is, and is not guaranteed to work
;on any particular hardware/software configuration. Furthermore, no
;liability is granted with this software: the user takes responcibility for
;any damage this software may do to his system.
;
; Nasy notices aside, if you have any questions about this software, you
;can reach me at the address below. If you impliment any new features or
;find (and fix!) any bugs, I would be happy to hear from you.
;
; Mike Higgins
; The Computer Entomologist
; P.O. Box 197
; Duncans Mills, CA 95430
INCLUDE CODE
PUBLIC _MOPEN
_MOPEN PROC NEAR ;INT=MOPEN(NAME);
NAME=4
PUSH BP ;DO THE NORMAL C LINKAGE
MOV BP,SP
MOV DX,NAME[BP] ;GET NAME OF DEVICE TO OPEN
MOV AX,03D02H ;OPEN IT FOR READ/WRITE.
INT 021H ;WELL, CAN DOS DO IT?
JC OPENERR ;CHECK FOR ERROR
MOV BX,AX ;SET UP TO DO AN IOCTL CALL
MOV AX,04400H ;GET DEVICE INFO
INT 021H
OR DL,020H ;SET THE "RAW" BIT, AND
MOV DH,0 ;CLEAR UPPER BITS
MOV AX,04401H ;WRITE IT BACK OUT
INT 021H
MOV AX,BX ;RETURN THE HANDLE
OPENDONE:
POP BP ;RECOVER BP
RET ;RETURN TO C
OPENERR:
OR AH,080H ;MAKE AX NEGATIVE
JMP OPENDONE
_MOPEN ENDP
PUBLIC _MCLOSE
_MCLOSE PROC NEAR ;MCLOSE(HANDLE);
HAND=4
PUSH BP
MOV BP,SP
MOV BX,HAND[BP] ;GET FILE HANDLE
MOV AH,03EH
INT 021H ;CLOSE FILE
POP BP
RET
_MCLOSE ENDP
PUBLIC _MREAD
_MREAD PROC NEAR ;SIZE=MREAD(BUF,SIZE,HAND);
BUF=4
SIZE=6
HAND=8
PUSH BP
MOV BP,SP
MOV DX,BUF[BP] ;GET BUFFER ADDRESS
MOV CX,SIZE[BP] ;AND LENGTH
MOV BX,HAND[BP] ;GET FILE HANDLE
MOV AH,03FH ;SET UP TO DO A READ
INT 021H
JNC RDONE ;CHECK FOR ERROR
OR AH,080H ;MAKE NEGATIVE FOR ERROR
RDONE:
POP BP
RET
_MREAD ENDP
PUBLIC _MWRITE
_MWRITE PROC NEAR ;SIZE=MWRITE(BUF,SIZE,HAND);
PUSH BP
MOV BP,SP
MOV DX,BUF[BP] ;GET BUFFER ADDRESS
MOV CX,SIZE[BP] ;AND LENGTH
MOV BX,HAND[BP] ;GET FILE HANDLE
MOV AH,040H ;SET UP TO DO A WRITE
INT 021H
POP BP
RET
_MWRITE ENDP
PUBLIC _MIOCTLR ;DO I/O CONTROL READ
_MIOCTLR PROC NEAR ;ERR=MIOCTLR(BUF,LEN,HAND);
PUSH BP ;DO THE NORMAL C LINKAGE
MOV BP,SP
MOV BX,HAND[BP] ;STORE HANDLE IN BX
MOV DX,BUF[BP] ;GET BUFFER ADDRESS
MOV CX,SIZE[BP] ;AND LENGTH.
MOV AX,04402H ;TELL DOS THIS IS IOCTL CALL READ
INT 021H ;WAKE UP DOS.
JNC IORDONE ;CHECK FOR ERROR
OR AH,080H ;RETURN ERROR NEGATIVE
IORDONE:
POP BP ;RECOVER BP
RET ;RETURN TO C
_MIOCTLR ENDP
PUBLIC _MIOCTLW ;DO I/O CONTROL WRITE
_MIOCTLW PROC NEAR ;ERR=MIOCTLW(BUF,LEN,HAND);
PUSH BP ;DO THE NORMAL C LINKAGE
MOV BP,SP
MOV BX,HAND[BP] ;STORE HANDLE IN BX
MOV DX,BUF[BP] ;GET BUFFER ADDRESS
MOV CX,SIZE[BP] ;AND LENGTH.
MOV AX,04403H ;TELL DOS THIS IS IOCTL CALL WRITE
INT 021H ;WAKE UP DOS.
JNC IOWDONE ;CHECK FOR ERROR
OR AH,080H ;RETURN ERROR NEGATIVE
IOWDONE:
POP BP ;RECOVER BP
RET ;RETURN TO C
_MIOCTLW ENDP
INCLUDE ENDCODE
END